WMI 是 PowerShell 的一個子系統,為系統管理員提供了強大的系統監控工具。
WMI 的目標是整合跨企業網路的設備和應用程序管理。WMI 是 Windows 作業系統的核心組成部分,自 Windows 2000 起便已預裝。
WMI 由以下組件構成:
組件名稱 | 說明 |
---|---|
WMI 服務 | Windows Management Instrumentation 進程,自動在啟動時運行,充當 WMI 提供者、WMI 存儲庫和管理應用之間的中介。 |
管理物件 | 任何可以由 WMI 管理的邏輯或物理組件。 |
WMI 提供者 | 監控與特定物件相關的事件/數據的物件。 |
類別 | WMI 提供者用來將數據傳遞給 WMI 服務的對象。 |
方法 | 附加到類別並允許執行操作。例如,方法可以用來啟動/停止遠程機器上的進程。 |
WMI 存儲庫 | 存儲與 WMI 相關的所有靜態數據的資料庫。 |
CIM 物件管理器 | 從 WMI 提供者請求數據並將其返回給應用程式的系統。 |
WMI API | 使應用程式能夠訪問 WMI 基礎架構。 |
WMI 消費者 | 通過 CIM 物件管理器向物件發送查詢。 |
一些用途包括:
本地/遠程系統的狀態資訊
配置遠程機器/應用程式的安全設置
設定和更改用戶和群組的許可權
設定/修改系統屬性
執行代碼
排程進程
設置日誌記錄
這些任務可以通過結合 PowerShell 和 WMI 命令行界面 (WMIC) 來完成。
可以通過在 Windows 命令提示字元中輸入 WMIC 打開一個互動式 shell 或直接運行命令,如 wmic computersystem get name 來獲取主機名稱。
如果想知道更多,可以輸入 WMIC /? 可以查看 WMIC 命令和別名的列表。
例如,以下命令列出了操作系統的信息:
C:\htb> wmic os list brief
BuildNumber Organization RegisteredUser SerialNumber SystemDirectory Version
19041 Owner 00123-00123-00123-AAOEM C:\Windows\system32 10.0.19041
WMIC 使用別名及相關的動詞、副詞和開關。
上面的命令例子使用 LIST 顯示數據,並使用副詞 BRIEF 提供核心屬性。可以在這裡查看動詞、開關和副詞的詳細列表。
WMI 可以使用 PowerShell 的 Get-WmiObject 模組來使用,該模組用於獲取 WMI 類別的實例或可用類別的資訊,可以在本地或遠程機器上使用。
以下命令獲取操作系統的資訊:
PS C:\htb> Get-WmiObject -Class Win32_OperatingSystem | select SystemDirectory,BuildNumber,SerialNumber,Version | ft
我們還可以使用 Invoke-WmiMethod 模組來調用 WMI 物件的方法。以下是一個重命名文件的簡單例子:
PS C:\htb> Invoke-WmiMethod -Path "CIM_DataFile.Name='C:\users\public\spns.csv'" -Name Rename -ArgumentList "C:\Users\Public\kerberoasted_users.csv"
明天繼續研究 WMI?
但其實下一篇是 WSL
https://academy.hackthebox.com/